﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.Skins;
using DevExpress.LookAndFeel;
using KNS.Invoice.UI;
using SQLDMO;
using System.Data.SqlClient;
using DevExpress.Utils;
using System.Runtime.InteropServices;
using InvoiceManagement.Controllers;

namespace InvoiceManagement
{
    public partial class frmPhucHoi : KNSFormBase
    {
        #region "Khai báo biến"
        public frmPhucHoi()
        {
            InitializeComponent();
        }

        SQLDMO.ApplicationClass sqlApp = new ApplicationClass();
        SqlConnection sqlConnect;
        SQLDMO.Restore restore;
        SQLDMO.SQLServer oServer = new SQLServer();
        #endregion         
               
        #region "Các hàm load dữ liệu"

        #endregion 

        #region "Các hàm sự kiện trên form"
        private void btnConnect_Click(object sender, EventArgs e)
        {
            if (KiemTraKetNoi())
            {
                lblTinhTrang.Text = "Kết nối thành công";
                btnSave.Enabled = true;
                txtTenDatabase.Focus();
            }
            else
            {
                lblTinhTrang.Text = "Kết nối không thành công";
                btnSave.Enabled = false;
                ClearText();
            }
        }

        private void frmPhucHoi_Load(object sender, EventArgs e)
        {
            //btnSave.Enabled = false;
        }

        private void btnChonFile_Click(object sender, EventArgs e)
        {
            //folderBrowserDialog1.ShowDialog();
            //if (folderBrowserDialog1.SelectedPath.ToString() == "")
            //{
            //    txtDuongDan.Text = "";
            //}
            //else
            //{
            //    txtDuongDan.Text = folderBrowserDialog1.SelectedPath.ToString();
            //}
            openFileDialog1.Title = "Chọn file cần restore";
            openFileDialog1.Filter = "SQL files (*.bak)|*.bak|All files(*.*)|*.*";
            openFileDialog1.FileName = "";
            openFileDialog1.ShowDialog();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion 

        #region "Các hàm xử lý khác"
        public void ClearText()
        {
            txtTenMayServer.Text = "";
            txtTenDangNhap.Text = "";
            txtMatKhau.Text = "";
            txtTenMayServer.Focus();
        }

        public bool KiemTraDuLieuKetNoi()
        {
            try
            {
                if (txtTenMayServer.Text == string.Empty || txtTenMayServer.Text == "")
                {
                    KNSMessageBox.Show("Chưa nhập tên máy chủ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    txtTenMayServer.Focus();
                    return false;
                }

                if (txtTenDangNhap.Text == string.Empty || txtTenDangNhap.Text == "")
                {
                    KNSMessageBox.Show("Chưa nhập tên đăng nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    txtTenDangNhap.Focus();
                    return false;
                }

                if (txtMatKhau.Text == string.Empty || txtMatKhau.Text == "")
                {
                    KNSMessageBox.Show("Chưa nhập mật khẩu kết nối", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    txtMatKhau.Focus();
                    return false;
                }
                return true;
            }
            catch { return false; }
        }

        public bool KiemTraKetNoi()
        {
            bool bln = false;

            string strConnect = "";
            if (KiemTraDuLieuKetNoi())
            {
                strConnect = "Server=" + txtTenMayServer.Text.Trim().ToString() + "; UID=" + txtTenDangNhap.Text.Trim().ToString() + "; PWD=" + txtMatKhau.Text.Trim().ToString();
                sqlConnect = new SqlConnection(strConnect);
                WaitDialogForm wait = new WaitDialogForm("", "Đang kết nối, vui lòng chờ...");
                try
                {
                    sqlConnect.Open();
                    wait.Close();
                    sqlConnect.Close();
                    bln = true;
                }
                catch
                {
                    wait.Close();
                    KNSMessageBox.Show("Không thể kết nối", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    ClearText();
                    bln = false;
                }
            }
            return bln;
        }

        public bool KiemTraDuLieu()
        {
            try
            {
                if (string.IsNullOrEmpty(txtTenDatabase.Text) | txtTenDatabase.Text == string.Empty)
                {
                    KNSMessageBox.Show("Chưa nhập tên của database cần restore", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return false;
                }

                if (string.IsNullOrEmpty(txtDuongDan.Text) | txtDuongDan.Text == string.Empty)
                {
                    KNSMessageBox.Show("Chưa chọn nơi để lưu file restore", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return false;
                }
                return true;
            }
            catch 
            {
                return false;
            }
        }

        public bool ThucHienRestore()
        {
            bool bln = false;
            try
            {
                if (KiemTraDuLieu())
                {
                    restore = new SQLDMO.Restore();
                    var _with1 = restore;
                    _with1.Database = txtTenDatabase.Text;
                    _with1.Files = txtDuongDanFile.Text;
                    _with1.ReplaceDatabase = true;
                    //oServer.Stop();
                    oServer.Connect(txtTenMayServer.Text, txtTenDangNhap.Text, txtMatKhau.Text);
                    _with1.SQLRestore(oServer);

                    restore = null;
                    oServer = null;
                    bln = true;
                }
            }
            catch 
            {
                return false;
            }
            return bln;
        }
        #endregion

        private void btnSave_Click(object sender, EventArgs e)
        {
            bool bln = false;
            bln = ThucHienRestore();
            if (bln == true)
            {
                KNSMessageBox.Show("Phục hồi database thành công", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                KNSMessageBox.Show("Phục hồi database thất bại", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            if (openFileDialog1.FileName == string.Empty)
            {
                txtDuongDan.Text = "";
            }
            else
            {
                txtDuongDan.Text = openFileDialog1.FileName.ToString();
            }
        }

        private void btnChonLuuTru_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowDialog();
            if (folderBrowserDialog1.SelectedPath.ToString() == "")
            {
                txtDuongDanFile.Text = "";
            }
            else
            {
                txtDuongDanFile.Text = folderBrowserDialog1.SelectedPath.ToString();
            }
        }

        
               
    }
}